package dao

import (
	"fmt"
	"go-shop-admin/internal/model"
	"os"
	"strings"
)

//数据库的迁移 / 数据库的绑定  https://gorm.io/zh_CN/docs/migration.html

//企业里面不用这个，因为表已经建好了！！！
//没有建表的话，也不用这个，否则DBA(数据库管理员)肯定会找你麻烦的
//就自己练习用这个

func migration() {
	////模型
	models := []interface{}{&model.AuthLoginLog{}}
	////写方法 - 读取model文件的个数，然后遍历返回
	////getModel() //未完成，最后一步字符怎么转 struct{} 实例？
	//
	//迁移时设置引擎和默认字符集
	err := _db.Set("gorm:table_options", "ENGINE=InnoDB DEFAULT charset=utf8mb4").
		AutoMigrate(models...)

	if err != nil {
		fmt.Println("autoMigrate 迁移数据库失败，err:", err)
	}
	return
}

// 获取模型  -- 未整理
func getModel() {
	path := "../model"
	var modelStringSlice []string
	var modelSlice []string
	files, err := os.ReadDir(path)
	if err != nil {
		//log.Fatal(err)
		fmt.Println("读取文件路径下所有的问价失败，路径：错误：", path, err)
	} else {
		for _, file := range files {
			//取出.go，只剩表名
			modelStringSlice = append(modelStringSlice, strings.Split(file.Name(), ".")[0])
		}
	}

	if len(modelStringSlice) > 0 {
		//模型
		modelSlice = make([]string, 0, len(modelStringSlice))

		for _, models := range modelStringSlice {
			modelNames := strings.Split(models, "_")

			var tmpString string
			for _, tab := range modelNames {
				tmpString += strings.ToUpper(tab[:1]) + tab[1:]
			}

			if tmpString != "Base" {
				modelSlice = append(modelSlice, tmpString)
			}

		}
	}

	fmt.Println(modelSlice, len(modelSlice))
	//[Auth AuthLoginLog AuthNode AuthOperateLog AuthRole AuthRoleChmod Cart Category Goods GoodsImages Order OrderInfo OrderInvoice OrderLog SysNotice User UserCollect] 17

	//模型
	//models := []interface{}{&model.Auth{}}
	//
	//

	//字符 转成 模型struct
	//for _, modelName := range modelSlice {
	//	tab := "model." + modelName + "{}"
	//
	//}

	//model.Auth{}
	//model.AuthLoginLog{}
	//model.AuthNode{}
	//model.AuthOperateLog{}
	//model.AuthRole{}
	//model.AuthRoleChmod{}
	//model.Cart{}
	//model.Category{}
	//model.Goods{}
	//model.GoodsImages{}
	//model.Order{}
	//model.OrderInfo{}
	//model.OrderInvoice{}
	//model.OrderLog{}
	//model.SysNotice{}
	//model.User{}
	//model.UserCollect{}

	//--------- 问题   如何转成需要的&model.User{}  ???---------

}
